package com.bls.cate.xiaomi;

import android.app.ActivityManager;
import android.content.Context;
import android.os.Process;

import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.LogUtils;
import com.bls.cate.constant.Keys;
import com.bls.cate.utils.AccountUtil;
import com.xiaomi.channel.commonutils.logger.LoggerInterface;

import com.xiaomi.mipush.sdk.Logger;
import com.xiaomi.mipush.sdk.MiPushClient;

import java.util.ArrayList;
import java.util.List;

/**
 * 　　  () 　　　  ()
 * 　　  ( ) 　　　( )
 * 　　  ( ) 　　　( )
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　┻　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ——————————————————
 * Created by BinglingSu on 2018/1/24.
 */

public class XMUtil {

    /**
     * 初始化小米推送
     *
     * @param context application context
     */
    public static void registerXMPush(Context context) {
        if (shouldInitXMPush(context))
            MiPushClient.registerPush(context, String.valueOf(Keys.XIAOMI_SERVICE.APP_ID), Keys.XIAOMI_SERVICE.APP_KEY);
        LoggerInterface newLogger = new LoggerInterface() {
            @Override
            public void setTag(String tag) {
                LogUtils.d("XMPush", "Tag： " + tag);
            }

            @Override
            public void log(String content, Throwable t) {
                LogUtils.d("XMPush", content, t);
            }

            @Override
            public void log(String content) {
                LogUtils.d("XMPush", content);
            }
        };
        Logger.setLogger(context, newLogger);
        if (!AppUtils.isAppDebug()) Logger.disablePushFileLog(context);
    }

    private static boolean shouldInitXMPush(Context context) {
        ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE));
        List<ActivityManager.RunningAppProcessInfo> processInfos;
        if (am != null) {
            processInfos = am.getRunningAppProcesses();
            String mainProcessName = context.getPackageName();
            int myPid = Process.myPid();
            for (ActivityManager.RunningAppProcessInfo info : processInfos) {
                if (info.pid == myPid && mainProcessName.equals(info.processName)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 在用户登录情况下  每次打开应用时 判断帐户的PushId是否绑定，未绑定时进行绑定
     * 在用户未登录情况下  每次打开应用时 判断PushId是否存在，存在时删除
     */
    public static void settingXMPushId(Context context) {
        List<String> xmPushUserAccountList = MiPushClient.getAllUserAccount(context);
        if (AccountUtil.isLogin() && (null == xmPushUserAccountList || xmPushUserAccountList.size() == 0)) {
            String strUniqueId = AccountUtil.getUniqueId();
            MiPushClient.setUserAccount(context, strUniqueId, null);
        } else if (!AccountUtil.isLogin() && xmPushUserAccountList.size() > 0) {
            for (String strPushId : xmPushUserAccountList)
                MiPushClient.unsetUserAccount(context, strPushId, null);
        }
    }
}
